<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script src='./MyPromise.js'></script>
    <script>
        // executor 同步执行 
        // res rej
        // pending 触发Fulfilled Rejected
        let oP = new MyPromise( (res, rej) => {
        //    throw new Error('duyi'); 
            // 异步操作
            // setTimeout(() => {
            //     res(0);
            // }, 2000);
            // console.log(0);
            res(1);
        });

        // oP.then((val) => {
        //     console.log(val, 'ok');
        //     return 1;
        // }, (reason) => {
        //     console.log(reason, 'no');
        //     return 2;
        // }).then((val) => {
        //     console.log(val, 'ok2');
        // }, (reason) => {
        //     console.log(reason, 'no2');
        // });
        

        // 链式操作
        // 

        // 异步执行
        // throw new Error();
        // 空then
        // 
        // oP.then((val) => {
        //     console.log(val, 'ok');
        //     // throw new Error('duyi');
        //     return 1;
        // }, (reason) => {
        //     console.log(reason, 'no');
        // }).then().then((val) => {
        //     console.log(val, '空then after')
        // }, (reason) => {
        //     console.log(reason, '空then after');
        // });


        // oP.then((val) => {
        //     console.log(val, 'ok');
        //     return new MyPromise((res, rej) => {
        //         res(0);
        //     });
        // }, (reason) => {
        //     console.log(reason, 'no');
        // }).then((val) => {
        //     console.log(val, 'ok 空then after')
        // }, (reason) => {
        //     console.log(reason, '空then after');
        // });



        // 1 ok    0 空then after


        function test (delay, x) {
            return new MyPromise(function (res, rej) {
                // setTimeout(function () {
                    rej('ok:' + x) 
                // }, delay);
            });
        }

        // test(200, 'a').then( (val) => {
        //     console.log(val);
        // }, (reason) => {
        //     console.log(reason);
        // });

        // 只要有一个promise对象进入 FulFilled 或者 Rejected 状态的话，
        // 就会继续进行后面的处理(看哪一个更快)   
    
        // race []
        // Promise.all([test(200, 'a'), test(300, 'b'), test(100, 'c')]).then(function (val) {
        //     console.log(val);
        // }, function (reason) {
        //     console.log(reason);
        // });

    </script>
</body>
</html>